10 ' Red Meets The Grumpy Grumbles
20 ' Extended Version with Comments
30 ' Please Note, due to the Nature of the Locomotive BASIC IF command,
40 ' 10 Liner Version extensively uses WHILE..WEND to get more code within
50 ' the 10 Line Limit. This version replaces the WHILE..WEND with IF
60 ' 
70 ' Setup Screen, Inks & Pen
80 MODE 0:CALL &BC02:PEN 1:INK 0,11:INK 1,11:INK 8,9:INK 9,18:INK 10,15:BORDER 11
90 ' Setup Variables & Gfx
100 DEFINT a-z:DIM m$(16,16)
110 GOSUB 610
120 SYMBOL 252,64,184,168,64
130 SYMBOL 253,56,68,68,56
140 SYMBOL 254,0,56,56
150 SYMBOL 255,0,0,0,0,16,16,16
160 ' Print Key
170 LOCATE 13,10:PRINT CHR$(252);
180 ' Draw Maze
190 IF sc=0 THEN RESTORE 960 ELSE RESTORE 1120
200 FOR y=1 TO 16
210   READ a$
220   FOR x=1 TO 16
230     m$(x,y)=MID$(a$,x,1)
240     IF m$(x,y)="1" THEN i=8:z=x:w=y:GOSUB 760
250   NEXT x
260   PRINT
270 NEXT y
280 sc=sc+1
290 INK 1,26 ' Display Key
300 ' Setup Positon of Red
310 z=6:w=2:c=1:GOSUB 860
320 ' Setup Positions of Grumpy Grumbles and Directional Control
330 f(1)=3:g(1)=4:f(2)=5:g(2)=15:f(3)=13:g(3)=15
340 h(1)=1:h(2)=-1:h(3)=1
350 ' Main Game Loop
360 q=0
370 IF JOY(0)=4 THEN IF m$(z-1,w)="0" THEN c=0:GOSUB 860:c=1:z=z-1:GOSUB 860
380 IF JOY(0)=8 THEN IF m$(z+1,w)="0" THEN c=0:GOSUB 860:c=1:z=z+1:GOSUB 860
390 IF JOY(0)=1 THEN IF m$(z,w-1)="0" THEN c=0:GOSUB 860:c=1:w=w-1:GOSUB 860
400 IF JOY(0)=2 THEN IF m$(z,w+1)="0" THEN c=0:GOSUB 860:c=1:w=w+1:GOSUB 860
410 ' Move Grumpy Grumbles & Check Collisions
420 FOR p=1 TO 3
430 SOUND 1,4095,6,7
440 IF z=f(p) THEN IF w=g(p) THEN PEN 3:GOSUB 920
450 IF q=1 THEN GOTO 560
460 x=f(p):y=g(p):c=0:GOSUB 890
470 f(p)=f(p)+h(p):x=f(p):c=2:GOSUB 890
480 IF m$(f(p)+1,g(p))="1" THEN h(p)=-1
490 IF m$(f(p)-1,g(p))="1" THEN h(p)=1
500 IF z=f(p) THEN IF w=g(p) THEN PEN 3:GOSUB 920
510 NEXT p
520 IF z=13 THEN IF w=10 THEN x=2:y=14:c=0:m$(2,14)="0":GOSUB 890
530 IF z=1 THEN IF w=14 THEN IF sc=1 THEN CLS:GOTO 190:ELSE IF z=1 THEN IF w=14 THEN IF sc=2 THEN LOCATE 9,20:PRINT"YAY!":q=1
540 IF q=0 THEN GOTO 370
550 IF q=2 THEN LOCATE 9,20:PEN 8:PRINT"GAME":PEN 11:LOCATE 9,21:PRINT"OVER"
560 CALL &BB03
570 CALL &BB18
580 CLEAR
590 END
600 ' Ariom Sprites - by David Hall
610 MEMORY &7CFF
620 FOR addr=&7D00 TO &7D74
630 READ a$
640 POKE addr,VAL("&"+a$)
650 NEXT addr
660 RETURN
670 DATA DD,46,04,11,20,00,21,15,7D,19,10,FD,E5,DD,46,02
680 DATA 21,AC,BF,1E,04,19,10,FD,1E,50,DD,46,00,19,10,FD
690 DATA D1,0E,08,E5,06,04,1A,77,23,13,10,FA,E1,3E,08,84
700 DATA 67,0D,20,EF,C9,00,40,C0,00,00,C5,CF,80,40,8A,8A
710 DATA CA,40,CF,CF,CA,00,80,8A,80,40,CC,44,C8,40,CC,CC
720 DATA C8,00,C4,CC,80,55,FF,FF,AA,FF,FF,FF,FF,AA,55,AA
730 DATA 55,FF,FF,FF,FF,FF,00,00,FF,AA,FF,FF,55,FF,FF,FF
740 DATA FF,55,FF,FF,AA
750 ' Draw Tree
760 PRINT CHR$(22)+CHR$(1)
770 FOR c=253 TO 255
780 PEN i
790 LOCATE z,w
800 PRINT CHR$(c);
810 i=i+1
820 NEXT c
830 PRINT CHR$(22)+CHR$(0)
840 RETURN
850 ' Display Sprite - c = Sprite Number, z = xpos, w = ypos
860 CALL &7D00,c,z,w
870 RETURN
880 ' As above but this uses x & y for xpos and ypos
890 CALL &7D00,c,x,y
900 RETURN
910 ' A Collision has occurred
920 LOCATE z,w
930 PRINT CHR$(238);
940 q=2
950 RETURN
960 DATA 1111111111111111
970 DATA 1000000100010001
980 DATA 1101111001010101
990 DATA 1000010011110101
1000 DATA 1010110110000101
1010 DATA 1010010000111001
1020 DATA 1011110111000001
1030 DATA 1000000100000001
1040 DATA 1111111000011111
1050 DATA 1001111001010001
1060 DATA 1010010011011101
1070 DATA 1011010110010101
1080 DATA 1001010111010101
1090 DATA 0101010110010101
1100 DATA 1100000111000001
1110 DATA 1111111111111111
1120 DATA 1111111111111111
1130 DATA 1010001000100001
1140 DATA 1000110001101101
1150 DATA 1000100100101001
1160 DATA 1010110101101101
1170 DATA 1011100100101001
1180 DATA 1001001101101011
1190 DATA 1000010000001001
1200 DATA 1111100000111011
1210 DATA 1010111111110011
1220 DATA 1000101011100111
1230 DATA 1010100111001111
1240 DATA 1010101110011111
1250 DATA 0110100100011111
1260 DATA 1010000000000111
1270 DATA 1111111111111111